package com.client;



import com.client.data.PanelBaseCompagnie;
import com.client.data.PanelBaseProduit;
import com.client.rule.PanelRuleComposition;
import com.client.service.LoginService;
import com.client.service.LoginServiceAsync;
import com.google.gwt.core.client.EntryPoint;
import com.google.gwt.core.client.GWT;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.i18n.client.HasDirection.Direction;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.AbsolutePanel;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.ClickListener;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.DecoratorPanel;
import com.google.gwt.user.client.ui.DialogBox;
import com.google.gwt.user.client.ui.HTML;
import com.google.gwt.user.client.ui.HasHorizontalAlignment;
import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.Hyperlink;
import com.google.gwt.user.client.ui.Image;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.PasswordTextBox;
import com.google.gwt.user.client.ui.RootPanel;
import com.google.gwt.user.client.ui.ScrollPanel;
import com.google.gwt.user.client.ui.TextBox;
import com.google.gwt.user.client.ui.VerticalPanel;
import com.google.gwt.user.client.ui.Widget;
import com.shared.context.User;

@SuppressWarnings("deprecation")
public class GestionCRG extends Composite implements EntryPoint {

private LoginServiceAsync loginService = GWT.create(LoginService.class);        
private DialogBox dialogBox = new DialogBox();

Label lblBienvenue=new Label() ;
final AbsolutePanel mainPanel = new AbsolutePanel();



Button boutonIdentifier = new Button("New button");
final RootPanel rootPanel = RootPanel.get();

boolean isConnecte = false ;
boolean isAdmin = false ;
AbsolutePanel conteneurMenu = new AbsolutePanel();
Menu menu = null;


        public GestionCRG() {}
        
        public void onModuleLoad() {
                
                //Panel contenant tout les autres panel, c'est le panel qui sera centré
                VerticalPanel paneldeFond = new VerticalPanel();
                paneldeFond.setWidth("100%") ;
                paneldeFond.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_CENTER) ;
                
                //Pour la couleur de fond (qui est la couleur de paneldeFond)
                //J'ai rajouté le .css dans le fichier html, et dans le css j'ai affecté un style au panel
                paneldeFond.setStyleName("paneldeFondStyle");
                
                
                //Panel contenant tout le haut (titre + connexion)
                HorizontalPanel panelsBandeau = new HorizontalPanel() ;
                panelsBandeau.setWidth("800px") ;
                
                
                //Panel conteneur pour la bandeau (seule solution si on veut pouvoir placer les objets précisément)
                AbsolutePanel conteneurBandeau = new AbsolutePanel();
                conteneurBandeau.setSize("800px","260px");
                conteneurBandeau.add(boutonIdentifier, 680, 10);
                boutonIdentifier.setWidth("107px");
                panelsBandeau.add(conteneurBandeau) ;
                
                boutonIdentifier.addClickHandler(new ClickHandler() {
                        public void onClick(ClickEvent event) {
                                if (!isConnecte){
                                        dialogBox = createDialogBox() ;
                                        dialogBox.center();
                                        dialogBox.show() ;
                                }
                                else{
                                        boutonIdentifier.setText("S'identifier");
                                        lblBienvenue.setText("") ;
                                        removeMenu() ;
                                        isConnecte = false ;
                                        mainPanel.clear() ;
        
                                        
                                }
                        }
                });
                boutonIdentifier.setText("S'identifier");
                
                
                //Titre
                Image logoTitre = new Image("logo.png");
                conteneurBandeau.add(logoTitre,10,10) ;
                
                logoTitre.addClickListener(new ClickListener() {
                        
                       
                        public void onClick(Widget sender) {
                                initPanels() ;
                                
                        }
                });
                
                
                //Panel top-right contenant bienvenue
                final VerticalPanel verticalPanel = new VerticalPanel();
                conteneurBandeau.add(verticalPanel, 300, 130);
                verticalPanel.setSize("311px", "21px");
                
                
                lblBienvenue.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_RIGHT);
                lblBienvenue.setDirection(Direction.RTL);
                lblBienvenue.addStyleName("bienvenue");
                verticalPanel.add(lblBienvenue);

        
                final Hyperlink linkRetour = new Hyperlink("Retour", "GestionCRG");             
                
                //rootPanel.add(mainPanel, 38, 186);
                mainPanel.setSize("800px", "500px");
                
                initPanels() ;  
                
/*
                linkDataForm.addClickListener(new ClickListener() {
                public void onClick(Widget sender) {
               
        mainPanel.clear();
        
        rootPanel.remove(linkDataForm);
        rootPanel.add(linkRetour,38,60) ;
                }
            });*/
            /*
            linkRetour.addClickListener(new ClickListener() {
                public void onClick(Widget sender) {
                    mainPanel.clear();
                    rootPanel.remove(linkRetour);
                    rootPanel.add(linkDataForm,38,60);
                    
                        }
                    });
          */
        
        DecoratorPanel decPanelMain = new DecoratorPanel();
        decPanelMain.add(mainPanel);
        conteneurBandeau.add(conteneurMenu,10,130) ;
        
        DecoratorPanel decPanelBandeau = new DecoratorPanel();
        decPanelBandeau.add(panelsBandeau);
        
        
        
        paneldeFond.add(decPanelBandeau);
        
        VerticalPanel espacement = new VerticalPanel() ; //j'ai pas trouvé d'autres solutions...
        espacement.setHeight("10px") ;

        paneldeFond.add(espacement) ;
        paneldeFond.add(decPanelMain);
        paneldeFond.add(new Label("Projet de Fin d'Etude - EL BOUHAIRI, QUEYROI, RAMAMOURTHY - 2010."));
        
        
        rootPanel.add(paneldeFond) ;
        
        /*
        PanelPaypal paypal = new PanelPaypal() ;
        paypal.update(new Object(),"150") ;
        mainPanel.add(paypal) ;*/
            
        }
        
        private DialogBox createDialogBox() {

            // Create a table to layout the content
            
            
                AbsolutePanel absolutePanel = new AbsolutePanel();
                absolutePanel.setSize("305px", "221px");
                
                Label lblLogin = new Label("Login :");
                absolutePanel.add(lblLogin, 56, 54);
                
                final TextBox loginBox = new TextBox();
                absolutePanel.add(loginBox, 118, 53);
                
                final PasswordTextBox passBox = new PasswordTextBox();
                absolutePanel.add(passBox, 118, 81);
                
                Label lblPassword = new Label("Password :");
                absolutePanel.add(lblPassword, 24, 87);
                
                Button validateButton = new Button("New button");
                absolutePanel.add(validateButton, 179, 135);
                
                
                validateButton.addClickHandler(new ClickHandler() {
                        public void onClick(ClickEvent event) {

                                                                                
                                loginService.check(loginBox.getText(), passBox.getText(), new AsyncCallback<User>() {
                                        
                                        public void onSuccess(User result) {                                            
                                                
                                                dialogBox.hide();       
                                                lblBienvenue.setText("Bienvenue " + result.getName()) ;
                                                boutonIdentifier.setText("Deconnexion") ;
                                                isConnecte = true ;
                                                isAdmin = result.isAdministrator() ;
                                                mainPanel.clear();
                                                conteneurMenu.clear();
                                                addMenu() ;
                                        }
                                        

                                        public void onFailure(Throwable caught) {
                                                dialogBox.hide() ;
                                                Window.alert(caught.getMessage());
                                                
                                                isConnecte = false ;
                                                
                                        }
                                });

                                dialogBox.hide();
                        }
                        
                });
                validateButton.setText("OK");
                validateButton.setSize("86px", "28px");
                
                Button cancelButton = new Button("New button");
                absolutePanel.add(cancelButton, 72, 135);
                cancelButton.addClickHandler(new ClickHandler() {
                        public void onClick(ClickEvent event) {
                                dialogBox.hide();
                                loginBox.setText("") ;
                                passBox.setText("") ;
                                
                        }
                });
                cancelButton.setText("Annuler");
                cancelButton.setSize("86px", "28px");
                
                Label lblNouveauClient = new Label("Nouveau client ?");
                absolutePanel.add(lblNouveauClient, 24, 182);
                
                Hyperlink linkInscription = new Hyperlink("Inscrivez-vous ici !","Inscription");
                absolutePanel.add(linkInscription, 154, 182);
                linkInscription.addClickListener(new ClickListener() {
                public void onClick(Widget sender) {
                        
            dialogBox.hide() ;  
        mainPanel.clear();
        Inscription register = new Inscription() ;
      
        //Ajout d'un scrollPanel 
        ScrollPanel scrollPanelInscription = new ScrollPanel() ;
        scrollPanelInscription.setSize("800px", "500px");
        scrollPanelInscription.add(register.createInscription());
        //scrollPanelInscription.setAlwaysShowScrollBars(true);
        mainPanel.add(scrollPanelInscription) ;
       
    
                }
            });
                
                
                dialogBox.setText("Veuillez vous identifier:") ;
            dialogBox.setWidget(absolutePanel);    
            dialogBox.setAnimationEnabled(true) ;

            // Return the dialog box
            return dialogBox;

          }
        
        public void addMenu(){
                
                if(isAdmin && isConnecte){
                        menu = new MenuAdmin() ;
                        
                        Hyperlink linkBase = new Hyperlink("test", "test2");
                        linkBase = menu.getLinkBase() ;
                        linkBase.addClickListener(new ClickListener() {
                        
                        public void onClick(Widget sender) {
                        	 ScrollPanel scrollPanel = new ScrollPanel() ;
                        	 scrollPanel.setSize("800px", "500px");    
                        	 scrollPanel.add((new PanelBaseClient()).createPanelBaseClient());                                    
                                mainPanel.clear() ;
                                mainPanel.add(scrollPanel);
                                
                                }
                            });
                        
                        Hyperlink linkGestion = new Hyperlink("test", "test2");
                        linkGestion = menu.getLinkGestion();
                        linkGestion.addClickListener(new ClickListener() {
                        
                        public void onClick(Widget sender) {
                        	 ScrollPanel scrollPanel = new ScrollPanel() ;
                        	 scrollPanel.setSize("800px", "500px");                             
                        	 scrollPanel.add((new PanelRuleComposition()).createPanelRuleComposition());
                                //PanelGestion panelBase = new PanelGestion() ; 
                        		
                                mainPanel.clear() ;
                                mainPanel.add(scrollPanel);

                                }
                            });
                        
                        conteneurMenu.clear() ;
                        conteneurMenu.add(menu.createMenu()) ;
                        
                        Hyperlink linkProduitBase = ((MenuAdmin) menu).getLinkProduitBase();
                        linkProduitBase.addClickHandler(new ClickHandler() {
							
							public void onClick(ClickEvent event) {
								ScrollPanel scrollPanel = new ScrollPanel() ;
	                        	scrollPanel.setSize("800px", "500px");   
	                        	scrollPanel.add((new PanelBaseProduit()).createPanel());
	                        	mainPanel.clear() ;
								mainPanel.add(scrollPanel);
								
							}
						});
                        
                        Hyperlink linkCompagnie = ((MenuAdmin) menu).getLinkCompagnieBase();
                        linkCompagnie.addClickHandler(new ClickHandler() {
							
													
								public void onClick(ClickEvent event) {
									ScrollPanel scrollPanel = new ScrollPanel() ;
		                        	scrollPanel.setSize("800px", "500px");   
		                        	scrollPanel.add((new PanelBaseCompagnie()).createPanel());
		                        	mainPanel.clear() ;
									mainPanel.add(scrollPanel);
								}
							
						});
                        
                }else if (!isAdmin && isConnecte){
                        menu = new MenuClient();
                        
                        Hyperlink linkModifier = new Hyperlink("test", "test2");
                        linkModifier = menu.getLinkModifier() ;
                        linkModifier.addClickListener(new ClickListener() {
                        
                        public void onClick(Widget sender) {
                                PanelModifProfil panelModif = new PanelModifProfil() ;  
                                
                                ScrollPanel scrollPanelModif = new ScrollPanel() ;
                                scrollPanelModif.setSize("800px", "500px");
                                scrollPanelModif.add(panelModif.createModifProfil());
                                mainPanel.clear() ;
                                mainPanel.add(scrollPanelModif);

                                }
                            });
                        
                
                        
                        Hyperlink linkTarif = new Hyperlink("test", "test2");
                        linkTarif = menu.getLinkTarif();
                        linkTarif.addClickListener(new ClickListener() {
                        
                        public void onClick(Widget sender) {
                                PanelTarif panelModif = new PanelTarif() ;      
                                mainPanel.clear() ;
                                mainPanel.add(panelModif.createPanelTarif());

                                }
                            });
                        
                        
                        
                        Hyperlink linkViewProfile = new Hyperlink("test", "test2");                     
                        linkViewProfile = menu.getLinkProfil() ;
                        linkViewProfile.addClickListener(new ClickListener() {
                                
                                
                                public void onClick(Widget sender) {
                                        
                                        PanelViewProfile panelProfil = new PanelViewProfile() ;
                                        
                                        ScrollPanel scrollPanelView = new ScrollPanel() ;
                                scrollPanelView.setSize("800px", "500px");
                                scrollPanelView.add(panelProfil.createViewProfile());
                                        mainPanel.clear();
                                        mainPanel.add(scrollPanelView) ;
                                }
                        });
                        
                        conteneurMenu.clear() ;
                        conteneurMenu.add(menu.createMenu()) ;
                }
                
                
        }
        
        public void removeMenu(){
                
                conteneurMenu.clear() ;
                
        }
        
        public static void centerElement(){
        
        }
        
        public void initPanels(){
                
                conteneurMenu.clear();
                mainPanel.clear();
                HTML texteMainPanel = new HTML() ;
                Label texteConteneurMenu = new Label() ;
                
                texteMainPanel.setHTML("<p><strong>COURTAGE RIVE GAUCHE</strong> (CRG) est une Société de courtage en assurances créée en 1987 par <strong>Joël BOBIN</strong> et <strong>Joël FIORENZO</strong>, anciens agents généraux d'assurance.</p> <p>Ses 20 ans de développement sur tout le territoire national lui ont permis d'acquérir un <strong>savoir-faire</strong> et une <strong>notoriété</strong> reconnus par tous les grands groupes d'assurance : <em>AXA, GENERALI, AGF, GAN</em>...et bien d'autres, tous aussi performants.</p> <p>Son équipe de <strong>20 collaborateurs</strong>, répartie sur 4 bureaux de souscription, est au service de tous les clients potentiellement assurables : particuliers, entreprises, artisans, professions libérales, collectivités, associations etc...</p> <p><strong>Courtage Rive Gauche</strong> diffuse l'intégralité des produits d'assurance traditionnels du Marché mais aussi des garanties que les Dirigeants ont mis au point, notamment en <em>santé</em>, en <em>protection juridique</em> ou encore pour des professions spécifiques comme les <em>voituriers</em>, les <em>artificiers</em> ou les <em>réseaux de franchises</em>.</p>");
                mainPanel.add(texteMainPanel) ;
                
                texteConteneurMenu.setText("Courtage Rive Gauche vous souhaite la bienvenue") ;
                conteneurMenu.add(texteConteneurMenu) ;
                
        }
        
        
        
        
}
        